package com.citywithincity.api;

import java.util.Map;

import com.damai.action.IAction;

public class Router {
	
	/**
	 * 添加一个action
	 * @param rule
	 * @param action
	 */
	public void addAction(String rule,IAction action) {
		
	}
	
	/**
	 * 获取一个action
	 *  支持如下规则:
	 *  
	 *  /a/b/c/d
	 *  /a/{id}/test
	 *  
	 *  /{id}/test ?能否可以呢，不建议,重复的可能性非常大
	 *  
	 *  //可选参数
	 *  /images/{id}
	 *  /images
	 *  这两个url是访问到同一个方法呢，还是两个方法?
	 *  建议两个方法，可以通过RequestMap标注
	 *  
	 *  算法：
	 *  首先处理明确的key
	 *  
	 *  1、第1层有明确的key,放到这个key对应的node里面处理
	 *  2、若找不到，第1层是否有模糊匹配，若有，放到这个里面来处理
	 *  
	 *  Node=>Map<String,Node>+Node(模糊匹配)+Action+Level+Key
	 *  
	 *  几种情况:
	 *  1、若本Node已经有一个Action，并且parts不是最后一个，继续匹配
	 *  2、本Node有一个Action，并且parts是最后一个，则ok
	 *  3、parts已经到最后一个了还是没有匹配到，则404
	 *  
	 *  
	 *  解析数据，将层级放在node里面，传递一个数组进去
	 *  
	 *  
	 *  if(Key==parts[Level] && parts.length-1==Level){
	 *  		return Action;
	 *  }
	 *  
	 *  
	 *  
	 *  
	 *  
	 *  
	 *  
	 *  
	 *  
	 * 
	 * 
	 * @param url
	 * @return
	 */
	public IAction getAction(String url) {
		
		if(url==null) {
			throw new NullPointerException("Url cannot be null!");
		}
		
		//url指的是去掉context路径的,并且去掉第一个/
		
		String[] parts = url.split("/");
		
		
		
		return null;
	}
	
	private Map<String, RouterNode> children;
	
	private RouterNode node;
}
